From 9a6d50b3f355c1e4d72a235aa0bac4856dff1785 Mon Sep 17 00:00:00 2001
From: Adrian Perez de Castro <aperez@igalia.com>
Date: Tue, 27 Mar 2018 19:59:23 +0100
Subject: [PATCH] CMake: Handle multiple libraries being returned for Brotli

Brotli is built as three libraries: libbrotlienc, libbrotlidec, and
libbrotlicommon. When requesting the linker flags using pkg-config for
e.g. libbrotlidec, it will return both libbrotlidec and libbrotlicommon.
The FindBrotli*.cmake files ignore the names of the libraries returned
by pkg-config, and hardcode only the libbrotli{enc,dec} names. While
this is fine when using shared libraries (they contain an entry for
libbrotlicommon as required library in their headers), it will cause
linker errors when Brotli has been built as static libraries, due to
the missing symbols from libbrotlicommon being unknown to the linker.

This fixes FindBrotli*.cmake files by using the library names reported
by pkg-config (instead of hardcoding them), and applying find_library()
to each of the libraries to find their absolute paths. If any of the
libraries is missing, the corresponding BROTLI{ENC,DEC}_LIBRARIES is
unset to let find_package_handle_standard_args() report an error.
---
 cmake/FindBrotliDec.cmake | 13 +++++++++----
 cmake/FindBrotliEnc.cmake | 14 ++++++++++----
 2 files changed, 19 insertions(+), 8 deletions(-)

Signed-off-by: Adrian Perez de Castro <aperez@igalia.com>
Upstream-Status: Submitted [https://github.com/google/woff2/pull/112]

diff --git a/cmake/FindBrotliDec.cmake b/cmake/FindBrotliDec.cmake
index abb06f4..9cbb415 100644
--- a/cmake/FindBrotliDec.cmake
+++ b/cmake/FindBrotliDec.cmake
@@ -18,10 +18,15 @@ find_path(BROTLIDEC_INCLUDE_DIRS
     HINTS ${PC_BROTLIDEC_INCLUDEDIR}
 )
 
-find_library(BROTLIDEC_LIBRARIES
-    NAMES brotlidec
-    HINTS ${PC_BROTLIDEC_LIBDIR}
-)
+set(BROTLIDEC_LIBRARIES "")
+foreach(_lib ${PC_BROTLIDEC_LIBRARIES})
+	find_library(PC_BROTLIDEC_PATH_${_lib} ${_lib} HINTS ${PC_BROTLIDEC_LIBRARY_DIRS})
+	if(NOT PC_BROTLIDEC_PATH_${_lib})
+		unset(BROTLIDEC_LIBRARIES)
+		break()
+	endif()
+	list(APPEND BROTLIDEC_LIBRARIES "${PC_BROTLIDEC_PATH_${_lib}}")
+endforeach()
 
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(BrotliDec
diff --git a/cmake/FindBrotliEnc.cmake b/cmake/FindBrotliEnc.cmake
index 4be347d..55f3932 100644
--- a/cmake/FindBrotliEnc.cmake
+++ b/cmake/FindBrotliEnc.cmake
@@ -18,10 +18,16 @@ find_path(BROTLIENC_INCLUDE_DIRS
     HINTS ${PC_BROTLIENC_INCLUDEDIR}
 )
 
-find_library(BROTLIENC_LIBRARIES
-    NAMES brotlienc
-    HINTS ${PC_BROTLIENC_LIBDIR}
-)
+set(BROTLIENC_LIBRARIES "")
+foreach(_lib ${PC_BROTLIENC_LIBRARIES})
+	find_library(PC_BROTLIENC_PATH_${_lib} ${_lib}
+		HINTS ${PC_BROTLIENC_LIBRARY_DIRS})
+	if(NOT PC_BROTLIENC_PATH_${_lib})
+		unset(BROTLIENC_LIBRARIES)
+		break()
+	endif()
+	list(APPEND BROTLIENC_LIBRARIES "${PC_BROTLIENC_PATH_${_lib}}")
+endforeach()
 
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(BrotliEnc
-- 
2.16.3

